In [2]:
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import sqlite3 as sq3
import numpy as np
In [3]:
#Q1
url = "https://raw.githubusercontent.com/bcaffo/MRIcloudT1volumetrics/master/inst/extdata/multilevel_lookup_table.txt"
multilevel_lookup = pd.read_csv(url, sep = "\t")
multilevel_lookup = multilevel_lookup.rename(columns = {
    "modify"   : "roi", 
    "modify.1" : "level4",
    "modify.2" : "level3", 
    "modify.3" : "level2",
    "modify.4" : "level1"})
multilevel_lookup = multilevel_lookup[['roi', 'level4', 'level3', 'level2', 'level1']]
multilevel_lookup.head()
# id = 127
subjectData = pd.read_csv("https://raw.githubusercontent.com/smart-stats/ds4bio_book/main/book/assetts/kirby21AllLevels.csv")
subjectData = subjectData.loc[(subjectData.type == 1) & (subjectData.level == 5) & (subjectData.id == 127)]
subjectData = subjectData[['roi', 'volume']]
## Merge the subject data with the multilevel data
subjectData = pd.merge(subjectData, multilevel_lookup, on = "roi")
subjectData = subjectData.assign(icv = "ICV")
subjectData = subjectData.assign(comp = subjectData.volume / np.sum(subjectData.volume))
print(subjectData.head())

comp_l1 = subjectData.groupby(['level1']).comp.sum().reset_index().rename(columns = {'comp' : 'comp'})
print(comp_l1)
a_l1=comp_l1.level1.unique()
a_l1=np.append(['ICV'], a_l1)
print(a_l1)
compl1value = comp_l1.comp.unique()
compl1value


comp_l2 = subjectData.groupby(['level1', 'level2']).comp.sum().reset_index().rename(columns = {'comp' : 'comp'})
print(comp_l2)
a_l2=comp_l2.level2.unique()
a_12=np.append(a_l1, a_l2)
print(a_12)
compl2value = comp_l2.comp.unique()
comp012value = np.append(compl1value,compl2value)
comp012value
          roi  volume level4     level3            level2           level1  \
0       SFG_L   12926  SFG_L  Frontal_L  CerebralCortex_L  Telencephalon_L   
1       SFG_R   10050  SFG_R  Frontal_R  CerebralCortex_R  Telencephalon_R   
2   SFG_PFC_L   12783  SFG_L  Frontal_L  CerebralCortex_L  Telencephalon_L   
3   SFG_PFC_R   11507  SFG_R  Frontal_R  CerebralCortex_R  Telencephalon_R   
4  SFG_pole_L    3078  SFG_L  Frontal_L  CerebralCortex_L  Telencephalon_L   

   icv      comp  
0  ICV  0.009350  
1  ICV  0.007270  
2  ICV  0.009247  
3  ICV  0.008324  
4  ICV  0.002227  
            level1      comp
0              CSF  0.079417
1   Diencephalon_L  0.008548
2   Diencephalon_R  0.008362
3    Mesencephalon  0.007430
4    Metencephalon  0.115313
5   Myelencephalon  0.003599
6  Telencephalon_L  0.384220
7  Telencephalon_R  0.393111
['ICV' 'CSF' 'Diencephalon_L' 'Diencephalon_R' 'Mesencephalon'
 'Metencephalon' 'Myelencephalon' 'Telencephalon_L' 'Telencephalon_R']
             level1            level2      comp
0               CSF          Sulcus_L  0.024577
1               CSF          Sulcus_R  0.021714
2               CSF         Ventricle  0.032536
3               CSF        Ventricle   0.000590
4    Diencephalon_L  BasalForebrain_L  0.003960
5    Diencephalon_L        Thalamus_L  0.004588
6    Diencephalon_R  BasalForebrain_R  0.003753
7    Diencephalon_R        Thalamus_R  0.004609
8     Mesencephalon   Mesencephalon_L  0.003577
9     Mesencephalon   Mesencephalon_R  0.003853
10    Metencephalon   Metencephalon_L  0.057506
11    Metencephalon   Metencephalon_R  0.057807
12   Myelencephalon  Myelencephalon_L  0.001738
13   Myelencephalon  Myelencephalon_R  0.001861
14  Telencephalon_L  CerebralCortex_L  0.200361
15  Telencephalon_L   CerebralNucli_L  0.008956
16  Telencephalon_L     WhiteMatter_L  0.174904
17  Telencephalon_R  CerebralCortex_R  0.204623
18  Telencephalon_R   CerebralNucli_R  0.009460
19  Telencephalon_R     WhiteMatter_R  0.179029
['ICV' 'CSF' 'Diencephalon_L' 'Diencephalon_R' 'Mesencephalon'
 'Metencephalon' 'Myelencephalon' 'Telencephalon_L' 'Telencephalon_R'
 'Sulcus_L' 'Sulcus_R' 'Ventricle' 'Ventricle ' 'BasalForebrain_L'
 'Thalamus_L' 'BasalForebrain_R' 'Thalamus_R' 'Mesencephalon_L'
 'Mesencephalon_R' 'Metencephalon_L' 'Metencephalon_R' 'Myelencephalon_L'
 'Myelencephalon_R' 'CerebralCortex_L' 'CerebralNucli_L' 'WhiteMatter_L'
 'CerebralCortex_R' 'CerebralNucli_R' 'WhiteMatter_R']
Out[3]:
array([0.07941665, 0.00854807, 0.00836216, 0.00742974, 0.11531317,
       0.00359877, 0.38422026, 0.3931112 , 0.0245765 , 0.02171413,
       0.03253647, 0.00058955, 0.00396045, 0.00458761, 0.00375284,
       0.00460931, 0.00357707, 0.00385267, 0.05750649, 0.05780668,
       0.00173826, 0.00186051, 0.20036053, 0.00895605, 0.17490368,
       0.20462262, 0.00945951, 0.17902906])
In [4]:
## Q1 Sankey Diagram
import plotly.graph_objects as go
import urllib, json

fig = go.Figure(data=[go.Sankey(
    node = dict(
      pad = 15,
      thickness = 20,
      line = dict(color = "black", width = 0.5),
      label = a_12,
      color = "blue"
    ),
    link = dict(
      source = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8], 
      target = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28],
      value = comp012value
  ))])

fig.update_layout(title_text="Brain Composition: Level 1 & 2 ", font_size=14)
fig.show()
In [ ]: